Task-Oriented Conversation Generation Using Heterogeneous Memory Networks

Task-Oriented Conversation Generation Using Heterogeneous Memory Networks

来源;ACL2019

链接: https://www.aclweb.org/anthology/P19-1226.pdf

Sih: 端到端对话生成任务中,用不同结构memory进行堆叠, 来处理不同来源的信息,应用context-aware memory和 context-free memory ,且context-aware memory加入了门机制。

DiDi provide paper.

Introduction

现有的问题

如何将外部知识整合到端到端的任务型对话生成任务中是目前研究的重点, 但目前存在的问题是, 现有的memory network 在利用不同来源的异构信息时表现并不好。

创新点

本文提出了一个异构记忆网络Heterogeneous Memory Networks (HMNs), 在端到端对话生成中利用两种不同的记忆网络 context-aware memory和 context-free memory 建模对话历史外部知识,希望用编码历史对话的表征来查找到外部知识中的表征,且在 context-aware memory中加入了门机制。

Model

Encoder

主要的idea:context-aware memory with gate.

Encoder端采用context-aware memory 将对话历史编码为上下文向量,具体做法:

输入:对于对话的历史信息,其每个单词由token,轮次,说话人身份三个部分组成:

$[(hello, t1, user),(may, t1, sys),(I, t1, sys),(help,t1, sys), (you, t1, sys)]$

每个单词先通过embedding look up转换成词向量,再将每个元组中的所有词向量相加,作为context-aware memory的输入,希望最后得到的输出是上下文向量 $c$。

则 k 跳的memory cells 为 $n^k = cat[n^k_1,n^k_2,…,n^k_l ]$ , 每个cell之间还要通过一个采用双向GRU的门控机制。

输入的上下文表示为$n^k = [\underset{n^k}{\rightarrow},\underset{n^k}{\leftarrow}]$, 正向过程表示为:

然后对query $qc^k$和memory cell $n^k$ 进行attention操作:

输出:将上下文向量$u^k$ 再与query相加,得到k 跳之后encoder的输出 $oc^k$.

Decoder

主要的idea: 堆叠两个不同的memory

解码器包含提出的HMNs和一个RNN controller, 其中HMNs是context-aware memory和context-free memory两种memory的堆叠,controller来控制HMNs查询的过程。具体做法是将对话历史加载到context-aware memory中,而知识库三元组被加载到context-free memory中,HMNs接受encoder端的输出作为输入,然后先遍历context-aware memories, 利用它最后一跳的输出$u^k$将用来查询context-free memory。

一些中间解释:

输入:Encoder输出的上下文向量 $c$

输出:在每个时间步中,HMNs会生成三个量: $oc^1$, $P{his}$, $P{kb}$, $P_{vocab}$

1)context aware memory 中对对话历史编码的第一跳的输出 $oc^1$

2)两个memory中最后一跳分别得到的两个注意力权重:对话历史的单词分布 $P{his}$ 和知识的分布 $P{kb}$。将上下文向量$oc^1$ 和隐藏层$ht$拼在一起,来得到预测词表分布的概率$P{vocab}$。

然后采用Word Selection Strategy 从 ${P{vocab},P{kb}, P_{his}}$的三个分布中选择一个单词:

  • 如果单词在$P{kb}, P{his}$ 的分布概率高,并且不指向哨兵位置上,则直接比较每个单词的概率,并选择较高的那个。

  • 如果其中一个词指向哨兵位置,模型将在另一个词表中选择概率最高的单词。最后,如果两个词表都指向哨兵位置,将从$P_{vocab}$ 中选择这个词。

本文采用copy机制从memory中来copy单词,用 $P{kb}$和$P{his}$来计算生成目标词的概率。如果目标单词没有出现在输入的句子当中,则指向memory中的最后的位置,哨兵标记。

Controller

采用GRU作为一个controller,接受encoder输出的上下文向量 $c$ 作为初始的隐藏状态 $h0$。在每个时间步长中,用先前的生成词的词向量 $E(g{t-1})$和上一个的隐藏状态$h_{t-1}$作为输入,来控制HMNs的查询过程。

Loss

在每一个时间步长,优化的损失函数是该时间步长 $t$ 下对目标单词预测的三个概率分布( ${P{vocab},P{kb}, P_{his}}$)的负对数似然求和:

Experiment

Dataset

  • Key-Value Retrieval dataset
  • dialog bAbI tasks
  • DSTC 2

Evaluation:

BLEU, F1 score, Per-response accuracy and Per-dialog accuracy.

做了四个对比实验:

  • SEQ2SEQ :一层LSTM做编解码器。
  • SEQ2SEQ + Attention
  • Mem2Seq
  • HMNs with context-free only (HMNs-CFO):来测试 context aware的性能

Result analysis

  • 文中认为该模型work的一个原因是,一个memory很难学习好来自不同的来源的分布。因此文中采用的分别对对话历史和知识用不同memory进行编码,可以得到两种比一般分布更好的分布,也说明了使用历史记忆生成的查询向量在知识库内存中检索信息是合理的。

  • HMN表现优于HMN-CFO,表明建立更好的对话历史记录的表示方式有益于知识的推理,并且能够通过改进查询向量来帮助改善context free memory。

  • 堆栈式存储网络体系结构和使用context aware memory来加载历史信息可以提高检索知识和生成语句的性能。

  • 模型缺点:不能解决large scare knowledge的问题。

Conclusion

文章提出了一个能够在端到端对话系统中整合异构信息的模型,具体是将异构memory network应用于对话历史和知识库的建模。提出的上下文感知记忆网络(context-aware memory networks)在学习对话历史的分布和检索知识方面表现较好。提供了在端到端面向任务的对话系统中高效使用各种结构化数据的可能性,而无需任何额外的标签和模块训练

Sih: 用不同结构memory处理不同来源的信息并且进行堆叠值得借鉴。

Reference :

[1] Enhancing Pre-Trained Language Representations with Rich Knowledge for Machine Reading Comprehension. ACL2019 https://www.aclweb.org/anthology/P19-1226.pdf

[2] Multi-Level Memory for Task Oriented Dialogs. NAACL2019 https://arxiv.org/pdf/1810.10647.pdf

[3] End-To-End Memory Networks. NIPS 2015 https://arxiv.org/abs/1503.08895

[4] Multi-task Learning for Natural Language Generation in Task-Oriented Dialogue EMNLP 2109 https://liusih.github.io/2019/09/25/Multi-task%20Learning%20for%20Natural%20Language%20Generation%20in%20Task-Oriented%20Dialogue/

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×